package com.chuangke.sinotrukbudget.service;

import com.chuangke.flow.domain.OrderModel;
import com.chuangke.flow.service.FlowService;
import com.chuangke.framework.service.OrderFlowService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class FlowDemoService implements OrderFlowService {

    @Autowired
    private FlowService flowService;

    /**
     * 启动流程实例
     * 具体调用节点根据业务自身需要，在合适的地方调用
     */
    public void start() {
        String processDefinitionKey = "13241231234345234535";//定义的流程id（在预算管理->预算配置->流程管理，里面的ID）

        //流程变量，流程定义的时候用到的变量，不需要可以不传值
        //如：归口审批的流程，根据单位类型进行分支，变量需要传dept_type
        //variables.put("dept_type","C") ;
        Map<String, Object> variables = new HashMap<>();

        OrderModel orderModel = new OrderModel();//业务单据信息，单据信息随便传，以下是必须的
        orderModel.setOrderId("");//单据id
        orderModel.setOrderType("");//单据类型，随便定义
        orderModel.setOrderDeptId("");//单位
        orderModel.setOrderService(FlowDemoService.class.getName());//流程实例服务，传入当前服务即可

        flowService.startProcessInstance(processDefinitionKey, orderModel, variables);
    }

    /**
     * 单据提交
     *
     * @param id        单据编号
     * @param variables 流程变量
     */
    @Override
    public void submit(String id, Map<String, Object> variables) {
        //@TODO 业务单据执行提交的业务操作
    }

    /**
     * 取消提交
     *
     * @param id
     * @param variables
     */
    @Override
    public void cancelSubmit(String id, Map<String, Object> variables) {
        //@TODO 业务单据执行取消提交的业务操作
    }

    /**
     * 单据退回
     *
     * @param id        单据编号
     * @param variables 流程变量
     */
    @Override
    public void reject(String id, Map<String, Object> variables) {
        //@TODO 业务单据执行退回的业务操作
    }

    /**
     * 单据审批
     *
     * @param id        单据编号
     * @param variables 流程变量
     */
    @Override
    public void complete(String id, Map<String, Object> variables) {
        //@TODO 业务单据执行审批的业务操作
    }
}
